home *** CD-ROM | disk | FTP | other *** search
/ Programming Sound Cards / Programming Sound Cards.iso / sound_56 / s3mplay.nfo < prev    next >
Text File  |  1995-01-01  |  8KB  |  192 lines

  1. S3M-player history:
  2. ^^^^^^^^^^^^^^^^^^^
  3.  
  4. It was written by Andre' Baresel
  5.  
  6. introduction: oh well, nobody is interrested in, but anyway ;)
  7.  
  8. Thx go out to: JUR/GA        .... for a lot of Betatesting :)
  9.                                   (keep on testing ;)
  10.                Craig Jackson .... for those cool SB infos :)
  11.                                   (come on let's release it - MANY people wait
  12.                                    for it)
  13.                Airon Jayder  .... for your song I found some bugs with
  14.         (thx for the motivation to produce a MusicDisk !)
  15. Question:
  16. ~~~~~~~~~
  17. Should I implement the 'Amiga finetune' command ? - it's really used in S3Ms
  18. or only in converted MODs ?
  19.  
  20. version 1.0ß :
  21. ~~~~~~~~~~~~~
  22.    - first version with all effects
  23.    - only mono 8bit :)
  24.    - rastertime only for samplerate 35714 Hz
  25.  
  26. version 1.1ß :
  27. ~~~~~~~~~~~~~~
  28.    - correction with patternloop (thx JUR/GA)
  29.    - rastertime now for all samplerates (>4000Hz)
  30.    - load patterns in EMS is implemented, BUT not yet the
  31.      play routines for that ;) - so switch off EMS usage !
  32.    - a bug with interrupt killed ? - I forgot to restore it ...
  33.  
  34. version 1.2ß :
  35. ~~~~~~~~~~~~~~
  36.    - fixed some bugs in EMS routines
  37.    - play routines for pattern in EMS - "EMS for president" :)
  38.      (Cost me hours of my live - computer hangs on X times - beat those stupid
  39.      bugs ! oh well ...)
  40.    - sorry version 1.1ß was 'copro' only (was a wrong setting in BP compiler -
  41.      I don't need a copro
  42.    - bug killed in 'special' effects thx JUR/GA
  43.  
  44. version 1.3ß :
  45. ~~~~~~~~~~~~~~
  46.    - playroutines improved for samples in EMS -> 480KB free mem for DOS shell
  47.      (more than iplay hehe :)
  48.    - major "bug" (I forgot about that special case) in note handling killed
  49.    - Notecut was 1 tick to short - fixed thx JUR
  50.    - now calc every screen the same amount of data for playing
  51.    - bug fixed in load routine (was only with EMS usage)
  52.    - stereo play added
  53.    - some extra keys added in PLAYS3M.EXE
  54.    - small bug with to high volumes deleted
  55.    - another bug in 'read notes' killed (why the hell musician use not defined
  56.      instruments ?)
  57.  
  58. version 1.4ß :
  59. ~~~~~~~~~~~~~~
  60.    - optimized innerloop in FILLDMA (16 to 8bit converter, but later also 
  61.      16to16 - that's only a question of time :)
  62.    - retrigg corrected (volup & voldown was not correct - sorry for this :)
  63.    - another bug killed in 'readinstrument' deleted (sorry for that what I did
  64.      there before ;)
  65.    - a really horrible bug killed in 'setsamplerate' - thx to JURs SB PRO
  66.      which ofcoz can play only 22Khz stereo (at 45KHz with my SB I couldn't 
  67.      hear that :)
  68.      -> after this I got no more computer hang ons !
  69.    - Flag added to switch on/off 'toslow' test. this test had caused in
  70.      former versions some note skips on JURs PC (I can imagin, but I don't
  71.      believe in <- if it's true it would be horrible!).
  72.    - improved plays3m a bit (some new info screens)
  73.    - wrote a new small version of player - more memory for DOSshell, but less
  74.      userfriendly :(
  75.    - a bug in DMApage override test killed
  76.    - a small bug in volslidedown killed (was volsldwn E1)
  77.  
  78. Speed results on a 486/DX33VLB:
  79. maxtest.s3m (16 channels full time used) 
  80.                          about 55% rastertime for 45kHz stereo
  81.              about 45% rastertime for 45kHz mono
  82.              about 33% rastertime for 22kHz stereo
  83.              about 28% rastertime for 22kHz mono
  84.              about 24% rastertime for 16kHz stereo
  85.              about 18% rastertime for 16kHz mono
  86.                          about 15% rastertime for 10kHz mono
  87. --> really shame on me for these results ! Oh well I have to optimize, ...,
  88. optimize, optimize
  89.  
  90. version 1.5ß :
  91. ~~~~~~~~~~~~~~
  92.    - some changes in "toslow?" test ... (hmm does it work on JURs PC ?)
  93.    - killed another bug (oh well sometimes I have to clean up my room ;)
  94.      in read instrument
  95.    - killed another bug in special case NO INSTRUMENT GIVEN - thx to Airon 
  96.      Jayder for his song WEDDING.S3M where I found it :)
  97.    - bug in calc posttable deleted (was bugy with some special volumes)
  98.    - bug fixed in retrigg (was one tick to late every retrigg :( )
  99.    - a stupid bug in vibrato and tremolo deleted - I used 128 byte tables -
  100.      sorry for this ! was a wrong interpretation what I got from some of my
  101.      examples :( ... now vibrato sounds really (!!!) like original thing in ST3
  102.    - fine vibrato added (was new in ST3.2)
  103.    - glissando controll not yet, but in next version ...
  104.  
  105. version 1.6ß :
  106. ~~~~~~~~~~~~~~
  107.    - bug fixed in 'set global volume' - now check for to high values ...
  108.    - error check removed. I checked for 1Ah at the end of songname, but ST3.00
  109.      (yeah a not released version) wrote 0 there. That check was not that 
  110.      important so I removed it.
  111.    - oscillator example added. It's simple and slow, but you will understand 
  112.      what I did and that's important, if you want to see a fast oscillator look
  113.      at our musicdisk - coming out ... soon ? I dounno, that depends on how
  114.      many effects we want to put into it.
  115.    - did a lot of optimizing (one 'add' deleted from inner loop + 31 out of 32
  116.      'dec','jnz' deleted ... I unrolled innerloop 32 times)
  117.    - fixed I SB PRO problem ... now I switch off SB PRO filter automaticly 
  118.      (that filter is really shit !).
  119.  
  120. version 1.7ß :
  121. ~~~~~~~~~~~~~~
  122.    - low quality mode added (44kHz lowqual = 22kHz Hiqual+every byte twice)
  123.      (44kHz lowqual sounds better than 22kHz lowqual - soundblaster hardware
  124.      sucks at lower frequencies!)
  125.    - EMS access optimized (now I switch for every EMS sample max 2 pages on !)
  126.    - removed a 'bug' in calc_frequency was buggy for C2speeds<3500Hz
  127.  
  128. Some ideas I thought about, but I haven't yet the time to add it:
  129. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  130. 1... maybe include panning for SB stereo ? (of course a lost of speed !)
  131.      I dounno yet, maybe a special option like stereo & 16bit play,
  132.      but speed lost from mono2stereo is not that high like stereo2panstereo
  133.      (remember: add every channel to both sides ... 2 times more memory access!)
  134. 2... idea "main panning": put all left channels abit to right side and all right
  135.      channels abit to the left ... it's better for ear phones ... no real use
  136.      on a big stereo :) ... that kind of panning would take not that much time
  137.      like panning for each channel seperate.
  138.  
  139. Coding idea for 1. :
  140. ~~~~~~~~~~~~~~~~~~~~
  141. another table for panning:  locpan: array[0..255,0..255] of byte;
  142.  
  143.   precalc it in this way: locpan[i,j]:=(i*j) shr 8 
  144.  
  145.   for opposite side do that later: 
  146.         locpan[255-i,j]:=(255-i)*j shr 8 = j - i*j shr 8
  147.  
  148.   bh = vol
  149.  
  150.   xor      eax,eax
  151.   mov      ah,channelpan
  152. lll:
  153.  
  154.      mov      al,samples[position]                         ; fs:[di]
  155.      ; .... next position in sample ...
  156.      add      edi,edx
  157.      adc      di,0
  158.      ; .... panning :
  159. (*)  mov      bl, locpan [channelpan,al] = locpan[eax]     ; gs:[eax]
  160.      mov      bp, volumetab[vol,bl] = volumetab[ebx+ebx]   ; ds:[ebx+ebx]
  161.  
  162.      add      [original side],bp                           ; es:[si]
  163.  
  164.      ;  to slow : mov      bl, locpan [255-channelpan,al] 
  165.      ;  the better way: (bl = locpan[eax] look above)
  166.      neg      bl
  167.      add      bl, al
  168. (*)  mov      bp, volumetab[vol,bl] = volumetab[ebx+ebx]   ; ds:[ebx+ebx]
  169.  
  170. (*)  add      [opposite side],bp                           ; es:[si+2] (or -2 ... two innerloops !)
  171.  
  172. dec  cx , loop to lll if cx>0
  173.  
  174. 3 memory acesses more than innerloop without panning !
  175. all registers used ...
  176.  
  177. Coding idea for 2.:
  178. ~~~~~~~~~~~~~~~~~~~
  179. implement it in filldma loop:
  180.  
  181. rightpan,
  182. oppositpan : array [0..4095] of byte;
  183.  
  184. take calculations I used for post8bit/post16bit but now add panning :
  185. rightpan[i]:=panvalue*post8bit[i] shr 8
  186. oppositepan[i]:=(255-panvlue)*post8bit[i] shr 8
  187.                = post8bit[i]-rightpan[i]
  188.  
  189. ... well for optimization put these two tables in one, add the results of both
  190. sides and write it. -> one 'add' more, and a 3 word accesses instead 
  191. of 2byte,1word acesses.
  192.